//
// Created by zhangyue26 on 2020/7/22.
//
#include <stdio.h>
#include <iostream>
/**
 * 数组指针的使用，注意 TODO *p++ 与 (*p)++ 与 *(p++) 的区别
 */
void arrayPoint1(){
    int *p,*q,a[5],b[5];
    p=&a[0];
    q=b;    //TODO 这里请注意： p=&a[0] 与 p=a 的效果是相同的都是将数组第一个值的指针的地址值交给指针变量p
    printf("请输入数组a中的元素:\n");
    for (int i = 0; i < 5; i++){
        scanf("%d",&a[i]);
    }
    printf("请输入数组b中的元素:\n");
    for (int i = 0; i < 5; i++){
        scanf("%d",&b[i]);
    }
    std::cout << "-------------------" << std::endl;
    printf("数组a中的元素为：\n");
    for (int i = 0; i < 5; i++){
        printf("%5d",*(p+i));
    }
    printf("\n");
    printf("数组b中的元素为：\n");
    for (int i = 0; i < 5; i++){
        printf("%5d",*(q+i));
    }
    printf("\n");

//    printf("---------------------------------\n");
//    printf("%d\n",(*p)++);//TODO 这里是指针 p 去数组的第一个值进行自加运算
//    printf("%d\n",(*p)++);
//    printf("%d\n",(*p)++);
//    printf("%d\n",(*p)++);
//    printf("%d\n",(*p)++);


//    printf("---------------------------------\n");
//    printf("%d\n",*(p++));//TODO 而这样就是先将指针地址所指向的值进行输出，然后在进行地址自增，等待下一次输出数组的下一个值
//    printf("%d\n",*(p++));
//    printf("%d\n",*(p++));
//    printf("%d\n",*(p++));
//    printf("%d\n",*(p++));

    printf("---------------------------------\n");
    printf("%d\n",*p++);//TODO 经验证这里值 *p++ 得输出与 *(p++) 输出的值是相同的，所以 *p++ 与 *(p++) 的效果是相同的，++的优先级比*高
    printf("%d\n",*p++);
    printf("%d\n",*p++);
    printf("%d\n",*p++);
    printf("%d\n",*p++);


}
/**
 * 二位数组的指针相关操作
 * TODO 注意数组在scanf接收数值的时候不需要使用取地址符 例如：scanf("%d",a[0]);
 * TODO 注意利用指针引用二位数组的关键要记住 *(a+i) 与 a[i] 是等价的
 */
void arrayPoint2(){
    int arr[3][3] = {{10,20,30},{40,50,60},{70,80,90}};
    int *p=&arr[0][0];
    for (int i = 0; i < 9; ++i) {
        printf("输出*p的值为：%d,对应的指针地址值为：%d\n",*p++,p);
    }
    printf("---------------------\n");
    int (*q)[3]=&arr[0]; //TODO 这里定义指针数组，特别注意
    for (int i = 0; i < 5; ++i) {
        printf("输出(*q)[i]的值为：%d,对应的指针地址值为：%d\n",(*q)[i],&((*q)[i])); //TODO 特别注意指针数组输出值的时候需要带[i]
        //TODO 直接输出指针数组的 *q 与 q的值是相同的
//        printf("输出*q的值为：%d,对应的指针q地址值为：%d\n",*q,q);
//        q++;
    }
}


